iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

30天教你學會Git系列 第 14

[Day14] 影分身的實際例子....哦我是說分支啦

  • 分享至 

  • xImage
  •  

今天要來看看實際例子!但開始之前....

  • 沒錯,在開始之前,我想要先讓各位了解一下什麼是HEAD
  • HEAD是一項指標,並且指向某一個分支,通常你可以把它當作==目前分支==看待
  • 在我們的git-test資料夾裡面其實有一個你看不見的資料夾!
    • 他叫做.git
    • 他是怎麼出來的?
      • 還記得我們一開始在我們創建的資料夾裡面打了一條指令git init
      • 就是這條指令會產生一個.git資料夾,並且讓git開始控制
$ ls
Hello.txt
  • 你可能會想說為什麼只有我創的那個檔案,我剛剛說的.git呢?
$ ls -al
total 8
drwxr-xr-x   4 luoweijie  staff  128  9 15 14:08 .
drwx------+ 25 luoweijie  staff  800  9 17 01:44 ..
drwxr-xr-x  12 luoweijie  staff  384  9 15 14:14 .git
-rw-r--r--   1 luoweijie  staff   22  9 15 14:08 Hello.txt
  • 這不就出現了嗎XD
& cd .git && ls -al
total 40
drwxr-xr-x  12 luoweijie  staff  384  9 15 14:14 .
drwxr-xr-x   4 luoweijie  staff  128  9 15 14:08 ..
-rw-r--r--   1 luoweijie  staff   34  9 15 14:14 COMMIT_EDITMSG
-rw-r--r--   1 luoweijie  staff   23  9 14 13:53 HEAD
-rw-r--r--   1 luoweijie  staff  137  9 14 13:53 config
-rw-r--r--   1 luoweijie  staff   73  9 14 13:53 description
drwxr-xr-x  13 luoweijie  staff  416  9 14 13:53 hooks
-rw-r--r--   1 luoweijie  staff  137  9 15 14:08 index
drwxr-xr-x   3 luoweijie  staff   96  9 14 13:53 info
drwxr-xr-x   4 luoweijie  staff  128  9 15 14:03 logs
drwxr-xr-x  12 luoweijie  staff  384  9 15 14:14 objects
drwxr-xr-x   4 luoweijie  staff  128  9 14 13:53 refs
  • 哇...好多東西....
  • 對,確實很多,但我們現在要來了解的是HEAD的觀念
$ cat HEAD
ref: refs/heads/master
  • 這代表,我們現在正在Master分支上面
  • 那我們現在創建一個新的分支叫...cat好了,並且切換到cat分支上
$ git checkout -b cat #記得要回到正確的目錄哦,在.git執行是不會成功的
Switched to a new branch 'cat'

$ cat .git/HEAD
ref: refs/heads/cat
  • 這樣知道HEAD在幹嘛了嗎~

好啦!進入今天的主題囉!

  • 我們先看看原本的架構長怎樣
    • 這裡面有三次Commit
      • 分別是C0、C1、C2
      • 每一次新的Commit都會指向上一次的Commit
    • 現在的版本是在C2上
  • 現在的情境就是,你今天是一個工程師,在專案中,你需要處理一個iss53的問題
$ git branch iss53
$ git checkout iss53
#或者你可以寫
$ git checkout -b iss53
Switched to a new branch 'iss53'
  • 經過這上方的指令,你的圖會變成....
    • 所以我們現在HEAD是在iss53上嘛
    • 換句話說,我們等等做的事情都是在分支上進行,跟本體是沒關係的!
$ echo.> 123.txt
$ git add .
$ git commit -m "Doc in iss53"
  • 當你寫到一半的時候,你的老闆衝進來,跟你說你專案的某一個地方出bug,需要你緊急處理!!

    • 怎麼辦呢?沒辦法,你還是要為了生活低頭XD
    • 雖然我們剛剛iss53只處理到一半,但我們就先把他Commit吧!
  • 接下來,我們來處理那個緊急BUG吧!

    • 我們先切回master,再創一個叫hotfix的分支
$ git checkout master

$ git checkout -b hotfix

  • 於是,就會變成下面這個圖

  • 當我們處理好那個緊急的bug時,我們就要把我們的hotfix分支結合回去我們的master裡面

  • 那要怎麼做呢???

$ git checkout master #先回到master分支上

$ git merge hotfix    #再把hotfix分支給merge進來
  • 你的圖會變成這樣

  • 在做完你的hotfix之後,你可以選擇把你的分支給刪掉((看你心情,個人是做完就會刪掉

  • 然後你可以再回到你那未完成的分支,繼續你今天要做的事情

$ git branch -d hotfix
$ git checkout iss53
$ vim 123.txt
$ git add .
$ git commit -m "New Doc in branch iss53"
  • 上面的指令裡面,你做了:

    • 刪掉分支hotfix
    • 在分支iss53又再多commit了一次
  • 所以圖會變成下面這樣:

  • 假設現在我們的分支iss53已經搞定了,我們要把他merge回去master裡面

$ git checkout master
$ git merge iss53
  • 經過上面的指令,架構會變成下面的樣子

好啦今天先到這邊~
這個branch 跟 merge 可是git裡面很重要的技能哦!!


上一篇
[Day13] 今天...我想走另一條路....
下一篇
[Day15] 關於昨天的餐點.....各位還滿意嗎?
系列文
30天教你學會Git30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言